////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                            //
//                                                         WNProject                                                          //
//                                                                                                                            //
//            This file is distributed under the BSD 2-Clause open source license. See License.txt for details.               //
//                                                                                                                            //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef __WN_STRINGS_H__
#define __WN_STRINGS_H__

#include "WNCore/inc/WNBase.h"

#include <string.h>

#ifdef _WN_CPLUSPLUS
    #include <string>

    typedef std::string                                     WNString;
#endif

__WN_INLINE WN_SIZE_T WNStrLen(const WN_CHAR* _string);
__WN_INLINE WN_CHAR* WNStrCpy(WN_CHAR* _destination, const WN_CHAR* _source);
__WN_INLINE WN_CHAR* WNStrCat(WN_CHAR* _destination, const WN_CHAR* _source);
__WN_INLINE WN_UINT32 WNStrCmp(const WN_CHAR* _string1, const WN_CHAR* _string2);
__WN_INLINE WN_CHAR* WNStrNCpy(WN_CHAR* _destination, const WN_CHAR* _source, WN_SIZE_T _count);
__WN_INLINE WN_CHAR* WNStrNCat(WN_CHAR* _destination, const WN_CHAR* _source, WN_SIZE_T _count);
__WN_INLINE WN_UINT32 WNStrNCmp(const WN_CHAR* _string1, const WN_CHAR* _string2, WN_SIZE_T _count);
__WN_INLINE WN_CHAR* WNStrNDup(const WN_CHAR* _string, WN_SIZE_T _length);
__WN_INLINE WN_CHAR* WNStrChr(WN_CHAR* _string, WN_UINT32 _char);
__WN_INLINE const WN_CHAR* WNStrChr(const WN_CHAR* _string, WN_UINT32 _char);
__WN_INLINE WN_CHAR* WNStrStr(WN_CHAR* _string1, const WN_CHAR* _string2);
__WN_INLINE const WN_CHAR* WNStrStr(const WN_CHAR* _string1, const WN_CHAR* _string2);
__WN_INLINE WN_SIZE_T WNStrHash(const WN_CHAR* _string);
__WN_INLINE WN_UINT32 WNStrToInt(const WN_CHAR* _string);

__WN_INLINE WN_WCHAR* WNStrToWStr(const WN_CHAR* _string);
__WN_INLINE WN_CHAR* WNWStrToStr(const WN_WCHAR* _string);

__WN_INLINE WN_SIZE_T WNWStrLen(const WN_WCHAR* _string);

#include "WNStrings/inc/WNStrings.inl"

#endif // __WN_STRINGS_H__
